Название плагина: DKR_ActorStatusAccumulator
Автор: DarchanKaen
Версия: 1.0
Дата выхода:
Версия 1.0 - 28.11.2021
Описание плагина:
Плагин позволяет вести счет, сколько раз на Персонажа было наложено Состояние, получать эту информацию, хранить ее и очищать.
Информация сохраняется в Аккумуляторе, который хранится в указанной переменной; доступно 10 Аккумуляторов.
Нюансы:
Плагин может быть полностью несовместим с другими плагинами на Состояния, проверять это нужно индивидуально к плагинам (см. раздел Совместимость).
Использование плагина(одинаково и для MV , и для MZ):
В Примечании персонажа нужно написать <statusAccumulator: N>, где N - номер Аккумулятора (от 1 до 10).
Параметры плагина
У плагина 10 параметров - номера переменных для сохранения соответствующего Аккумулятора; по-умолчанию в переменных 11-20.
Команды (в эвенте, в команде "Скрипт")
DKR.ActorStatusAccumulator.getStatusCount(actorId, statusId); - получить информацию, сколько раз на персонажа был наложен Статус.
DKR.ActorStatusAccumulator.clearAccumulator(actorI d); - очистить Аккумулятор, указанный для Песонажа с таким номером.
где:
actorId - номер Персонажа в Базе данных,
statusId - номер Состояние в Базе данных.
Код:
Спойлер Версия 1.0, MV:
Код://----------------------------------------------------------------------------- // DKR Actor Status Accumulator 1.0 //----------------------------------------------------------------------------- // For: RPGMAKER MV // DKR_ActorStatusAccumulator.js //----------------------------------------------------------------------------- // 28.11.2021 - Версия 1.0.0 //----------------------------------------------------------------------------- // Поставляется AS-IS. // Вся ответственность при использовании - на Пользователе! //----------------------------------------------------------------------------- var Imported = Imported || {}; Imported.DKR_ActorStatusAccumulator = true; var DKR = DKR || {}; DKR.ActorStatusAccumulator = DKR.ActorStatusAccumulator || {}; //----------------------------------------------------------------------------- /*: * @plugindesc (v.1.0.0) Плагин позволяет считать, сколько раз на Персонажа было наложено Состояние. * * @target MV * @author DarchanKaen * * @help * DKR Actor Status Accumulator * ---------------------------------------------------------------------------- * * ---Общая информация: * Плагин позволяет вести счет, сколько раз на Персонажа было наложено Состояние, * получать эту инфорамацию, хранить ее и очищать. * Информация сохраняется в Аккумуляторе, который хранится в указанной * переменной; доступна 10 Аккумуляторов. * * ---Параметры плагина * У плагина 10 параметров - номера переменных для * сохранения соответствующего Аккумулятора; * по-умолчанию в переменных 11-20. * * ---Использование плагина * У персонажа в Примечании напишите: * <statusAccumulator: N>, * где N - номер Аккумулятора от 1 до 10. * * ---Команды(в эвенте команда "Скрипт"): * DKR.ActorStatusAccumulator.getStatusCount(actorId, statusId) * DKR.ActorStatusAccumulator.clearAccumulator(actorId) * где actorId - номер Персонажа в Базе данных, * statusId - номер Состояние в Базе данных. * * Команду скрипта DKR.ActorStatusAccumulator.getStatusCount * можно использовать в Определении переменной или Условии! * ---------------------------------------------------------------------------- * @param accumulator1VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 1 * @default 11 * * @param accumulator2VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 2 * @default 12 * * @param accumulator3VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 3 * @default 13 * * @param accumulator4VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 4 * @default 14 * * @param accumulator5VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 5 * @default 15 * * @param accumulator6VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 6 * @default 16 * * @param accumulator7VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 7 * @default 17 * * @param accumulator8VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 8 * @default 18 * * @param accumulator9VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 9 * @default 19 * * @param accumulator10VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 10 * @default 20 * */ (function() { //----DATA DKR.ActorStatusAccumulator.parameters = PluginManager.parameters('DKR_ActorStatusAccumulator'); let accumulator1VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator1VarId"]) || 11; let accumulator2VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator2VarId"]) || 12; let accumulator3VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator3VarId"]) || 13; let accumulator4VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator4VarId"]) || 14; let accumulator5VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator5VarId"]) || 15; let accumulator6VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator6VarId"]) || 16; let accumulator7VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator7VarId"]) || 17; let accumulator8VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator8VarId"]) || 18; let accumulator9VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator9VarId"]) || 19; let accumulator10VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator10VarId"]) || 20; //----MODIFY Game_Action.prototype.itemEffectAddNormalState = function(target, effect) { var chance = effect.value1; if (!this.isCertainHit()) { chance *= target.stateRate(effect.dataId); chance *= this.lukEffectRate(target); } if (Math.random() < chance) { target.addState(effect.dataId); this.makeSuccess(target); } //--mod if( true === target.isActor() ){ addStatusToActorAccumulator(target, effect.dataId); } }; Game_Interpreter.prototype.command313 = function() { this.iterateActorEx(this._params[0], this._params[1], function(actor) { var alreadyDead = actor.isDead(); if (this._params[2] === 0) { actor.addState(this._params[3]); //--mod addStatusToActorAccumulator(actor, this._params[3]); } else { actor.removeState(this._params[3]); } if (actor.isDead() && !alreadyDead) { actor.performCollapse(); } actor.clearResult(); }.bind(this)); return true; }; //----LOGIC let addStatusToActorAccumulator = function(gameActor, statusId){ let actorId = gameActor.actorId(); let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId); let actorStatusAccumulator = null; if(-1 !== actorStatusAccumulatorVarId){ actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || []; actorStatusAccumulator.push(statusId); $gameVariables.setValue(actorStatusAccumulatorVarId, actorStatusAccumulator); } } let getActorStatusAccumulatorVarId = function(actorId){ let actorStatusAccumulatorVarId = -1; let actorMetadata = getActorMetadata(actorId); let actorStatusAccumulatorID = -1; actorStatusAccumulatorID = Number(actorMetadata.statusAccumulator); actorStatusAccumulatorVarId = getAccumulatorVarIdByAccumId(actorStatusAccumulatorID); //console.log('_actorStatusAccumulatorID:', actorStatusAccumulatorID); //console.log('_actorStatusAccumulatorVarId:', actorStatusAccumulatorVarId); return actorStatusAccumulatorVarId; } let getActorMetadata = function(actorId){ let actorMetadata = null; let actor = $dataActors[actorId]; actorMetadata = actor.meta; return actorMetadata; } let getAccumulatorVarIdByAccumId = function(actorStatusAccumulatorID){ let actorStatusAccumulatorVarId = null; switch(actorStatusAccumulatorID){ case 1: actorStatusAccumulatorVarId = accumulator1VarId; break; case 2: actorStatusAccumulatorVarId = accumulator2VarId; break; case 3: actorStatusAccumulatorVarId = accumulator3VarId; break; case 4: actorStatusAccumulatorVarId = accumulator4VarId; break; case 5: actorStatusAccumulatorVarId = accumulator5VarId; break; case 6: actorStatusAccumulatorVarId = accumulator6VarId; break; case 7: actorStatusAccumulatorVarId = accumulator7VarId; break; case 8: actorStatusAccumulatorVarId = accumulator8VarId; break; case 9: actorStatusAccumulatorVarId = accumulator9VarId;; break; case 10: actorStatusAccumulatorVarId = accumulator10VarId; break; default: actorStatusAccumulatorVarId = -1; break; } return actorStatusAccumulatorVarId; } let getStatusCountInAccumulator = function(actorId, statusId){ let statusCount = 0; let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId); let actorStatusAccumulator = null; if(-1 !== actorStatusAccumulatorVarId){ actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || []; for(let n = 0; n < actorStatusAccumulator.length; n++){ let currentStatusId = actorStatusAccumulator[n]; if(currentStatusId === statusId){ statusCount++; } } } //console.log('statusCount of ' + statusId + ' is: ' + statusCount); return statusCount; } clearConcreteStatusAccumulator = function(actorId){ let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId); if(-1 !== actorStatusAccumulatorVarId){ $gameVariables.setValue(actorStatusAccumulatorVarId, []); } } //-----COMMANDS DKR.ActorStatusAccumulator.getStatusCount = function(actorId, statusId){ return getStatusCountInAccumulator(actorId, statusId); } DKR.ActorStatusAccumulator.clearAccumulator = function(actorId){ clearConcreteStatusAccumulator(actorId); } })();
Спойлер Версия 1.0, MZ:
Код://----------------------------------------------------------------------------- // DKR Actor Status Accumulator 1.0 //----------------------------------------------------------------------------- // For: RPGMAKER MZ // DKR_ActorStatusAccumulator.js //----------------------------------------------------------------------------- // 28.11.2021 - Версия 1.0.0 //----------------------------------------------------------------------------- // Поставляется AS-IS. // Вся ответственность при использовании - на Пользователе! //----------------------------------------------------------------------------- var Imported = Imported || {}; Imported.DKR_ActorStatusAccumulator = true; var DKR = DKR || {}; DKR.ActorStatusAccumulator = DKR.ActorStatusAccumulator || {}; //----------------------------------------------------------------------------- /*: * @plugindesc (v.1.0.0) Плагин позволяет считать, сколько раз на Персонажа было наложено Состояние. * * @target MZ * @author DarchanKaen * * @help * DKR Actor Status Accumulator * ---------------------------------------------------------------------------- * * ---Общая информация: * Плагин позволяет вести счет, сколько раз на Персонажа было наложено Состояние, * получать эту инфорамацию, хранить ее и очищать. * Информация сохраняется в Аккумуляторе, который хранится в указанной * переменной; доступна 10 Аккумуляторов. * * ---Параметры плагина * У плагина 10 параметров - номера переменных для * сохранения соответствующего Аккумулятора; * по-умолчанию в переменных 11-20. * * ---Использование плагина * У персонажа в Примечании напишите: * <statusAccumulator: N>, * где N - номер Аккумулятора от 1 до 10. * * ---Команды(в эвенте команда "Скрипт"): * DKR.ActorStatusAccumulator.getStatusCount(actorId, statusId) * DKR.ActorStatusAccumulator.clearAccumulator(actorId) * где actorId - номер Персонажа в Базе данных, * statusId - номер Состояние в Базе данных. * * Команду скрипта DKR.ActorStatusAccumulator.getStatusCount * можно использовать в Определении переменной или Условии! * ---------------------------------------------------------------------------- * @param accumulator1VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 1 * @default 11 * * @param accumulator2VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 2 * @default 12 * * @param accumulator3VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 3 * @default 13 * * @param accumulator4VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 4 * @default 14 * * @param accumulator5VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 5 * @default 15 * * @param accumulator6VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 6 * @default 16 * * @param accumulator7VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 7 * @default 17 * * @param accumulator8VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 8 * @default 18 * * @param accumulator9VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 9 * @default 19 * * @param accumulator10VarId * @type variable * @desc Номер переменной для сохранения аккамулятора Актера 10 * @default 20 * */ (function() { //----DATA DKR.ActorStatusAccumulator.parameters = PluginManager.parameters('DKR_ActorStatusAccumulator_MZ'); let accumulator1VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator1VarId"]) || 11; let accumulator2VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator2VarId"]) || 12; let accumulator3VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator3VarId"]) || 13; let accumulator4VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator4VarId"]) || 14; let accumulator5VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator5VarId"]) || 15; let accumulator6VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator6VarId"]) || 16; let accumulator7VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator7VarId"]) || 17; let accumulator8VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator8VarId"]) || 18; let accumulator9VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator9VarId"]) || 19; let accumulator10VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator10VarId"]) || 20; //----MODIFY Game_Action.prototype.itemEffectAddNormalState = function(target, effect) { var chance = effect.value1; if (!this.isCertainHit()) { chance *= target.stateRate(effect.dataId); chance *= this.lukEffectRate(target); } if (Math.random() < chance) { target.addState(effect.dataId); this.makeSuccess(target); } //--mod if( true === target.isActor() ){ addStatusToActorAccumulator(target, effect.dataId); } }; Game_Interpreter.prototype.command313 = function(params) { this.iterateActorEx(params[0], params[1], actor => { const alreadyDead = actor.isDead(); if (params[2] === 0) { actor.addState(params[3]); //--mod addStatusToActorAccumulator(actor, this._params[3]); } else { actor.removeState(params[3]); } if (actor.isDead() && !alreadyDead) { actor.performCollapse(); } actor.clearResult(); }); return true; }; //----LOGIC let addStatusToActorAccumulator = function(gameActor, statusId){ let actorId = gameActor.actorId(); let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId); let actorStatusAccumulator = null; if(-1 !== actorStatusAccumulatorVarId){ actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || []; actorStatusAccumulator.push(statusId); $gameVariables.setValue(actorStatusAccumulatorVarId, actorStatusAccumulator); } } let getActorStatusAccumulatorVarId = function(actorId){ let actorStatusAccumulatorVarId = -1; let actorMetadata = getActorMetadata(actorId); let actorStatusAccumulatorID = -1; actorStatusAccumulatorID = Number(actorMetadata.statusAccumulator); actorStatusAccumulatorVarId = getAccumulatorVarIdByAccumId(actorStatusAccumulatorID); //console.log('_actorStatusAccumulatorID:', actorStatusAccumulatorID); //console.log('_actorStatusAccumulatorVarId:', actorStatusAccumulatorVarId); return actorStatusAccumulatorVarId; } let getActorMetadata = function(actorId){ let actorMetadata = null; let actor = $dataActors[actorId]; actorMetadata = actor.meta; return actorMetadata; } let getAccumulatorVarIdByAccumId = function(actorStatusAccumulatorID){ let actorStatusAccumulatorVarId = null; switch(actorStatusAccumulatorID){ case 1: actorStatusAccumulatorVarId = accumulator1VarId; break; case 2: actorStatusAccumulatorVarId = accumulator2VarId; break; case 3: actorStatusAccumulatorVarId = accumulator3VarId; break; case 4: actorStatusAccumulatorVarId = accumulator4VarId; break; case 5: actorStatusAccumulatorVarId = accumulator5VarId; break; case 6: actorStatusAccumulatorVarId = accumulator6VarId; break; case 7: actorStatusAccumulatorVarId = accumulator7VarId; break; case 8: actorStatusAccumulatorVarId = accumulator8VarId; break; case 9: actorStatusAccumulatorVarId = accumulator9VarId;; break; case 10: actorStatusAccumulatorVarId = accumulator10VarId; break; default: actorStatusAccumulatorVarId = -1; break; } return actorStatusAccumulatorVarId; } let getStatusCountInAccumulator = function(actorId, statusId){ let statusCount = 0; let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId); let actorStatusAccumulator = null; if(-1 !== actorStatusAccumulatorVarId){ actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || []; for(let n = 0; n < actorStatusAccumulator.length; n++){ let currentStatusId = actorStatusAccumulator[n]; if(currentStatusId === statusId){ statusCount++; } } } //console.log('statusCount of ' + statusId + ' is: ' + statusCount); return statusCount; } clearConcreteStatusAccumulator = function(actorId){ let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId); if(-1 !== actorStatusAccumulatorVarId){ $gameVariables.setValue(actorStatusAccumulatorVarId, []); } } //-----COMMANDS DKR.ActorStatusAccumulator.getStatusCount = function(actorId, statusId){ return getStatusCountInAccumulator(actorId, statusId); } DKR.ActorStatusAccumulator.clearAccumulator = function(actorId){ clearConcreteStatusAccumulator(actorId); } })();
Загрузка:
Спойлер Версия 1.0:
Условия поставки плагина:
Поставляется AS-IS.
Вся ответственность при использовании - на Пользователе!
!
Совместимость:
Т.к. плагин меняет логику обработки Состояний (хоть и незначительно) - он несовместим с другими плагинами, меняющими логику применения Состояний.=)
Пример использования:
Числа ниже - условны!
Например, нас интересует сколько раз Персонажа №2 отравили, то есть наложили Состояние №23 и это значение мы пишем в переменную №5.
В Опрделении переменной выбирает "Скрипт" и пишем DKR.ActorStatusAccumulator.getStatusCount(2, 23).
Теперь мы знаем, что в этой переменной записано, сколько же раз несчастного отравили...И теперь в магазинах будет продаваться ТОЛЬКО антидот. =)
При этом обратите внимание - после каждого отравления в переменная №5 автоматически не обновляется и нужно снова делать Определение переменной.
Спойлер Лирическое отступление:Подумал, что такой плагин может лично мне понадобиться для игровой статистики. Может еще кому-то поможет.
Социальные закладки